Restful路径下编写controller层及其增删改查 您所在的位置:网站首页 restful url没有id Restful路径下编写controller层及其增删改查

Restful路径下编写controller层及其增删改查

2024-07-12 16:18| 来源: 网络整理| 查看: 265

前置:需要先创建好项目,并且使用mabtis根据数据表生成好代码

mybatis plus自动生成代码(代码生成器)_wa1ttinG的博客-CSDN博客

一、controller层定义

controller层就是和用户打交道,直接与前端进行交互。可调用service层,要先的到对象一般使用自动装配,因此controller层总是使用@Autowired得到一个service对象。

二、controller类简单示例

定义了一个对与教师的teacher的controller业务

@RestController @RequestMapping("/eduservice/teacher") public class EduTeacherController { @Autowired private EduTeacherService teacherService; @GetMapping("findAll") public List findAllTeacher() { List list = teacherService.list(null); return list; } }

teacherService是由mabtis自动创建的Service层

将返回值作为json对象返回:@RestController  @ResponseBody

其源码

package org.springframework.web.bind.annotation; import ... @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Controller @ResponseBody public @interface RestController { @AliasFor( annotation = Controller.class ) String value() default ""; }

就是可以看到其有两个注解@Controller和@ResponseBody(注解具有继承性?),RestController是这两个的结合体,也就是@Controller:创建bean对象,@ResponseBody:注解表示该方法的返回的结果(return的结果)直接转换为json数据写入 HTTP 响应正文(响应体)中,返回值就是响应结果!!

同理@RequestBody就是将请求体json转换为java数据结构(一般是类,也可以是基本数据结构)。这个类需要提前定义好,且属性名要和json对照上。

二者都是请求体json和java数据结构的互换

返回的JSON时间格式的时区也需要修改,且格式也不是我们想要的。

"2019-10-30T06:18:46.000+0000"

进行修改,在application.properties中设置

#返回json的全局时间格式 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8

@RequestMapping

前端访问什么url 该controller进行工作,多用于Controller类上,比如

@RestController @RequestMapping("/eduservice/teacher") public class EduTeacherController {

那么如果前端发送请求路径是/eduservice/teacher时,由EduTeacherController接手请求,再根据细节路径和请求方式匹配Controller中函数,需要注意路径前必须要加/。

RequestMapping一般命名为模块名+mysql表名(实体名),这样可以方便的知道是对哪个模块下的哪个表的操作。

三、增删改查操作实现 前置知识1:Restful路径

假设要对教师teacher进行操作

方式

url

意义

get

/teacher

获取全部员工信息

get

/teacher/{id}

获取该id的员工信息

post

/teacher

添加(一条)员工信息

put

/teacher

更新员工信息

delete

/teacher/{id}

删除员工信息

助记:

1、获取全部教师信息不需要添加id、更新和添加教师信息使用post方式传给后端一个类,也不需要额外指明id。

2、此外添加员工和更新员工由于需要在请求体中添加json信息,get,delete请求不能携带请求体,而put和delete能够携带请求体,所以添加员工和更新员工肯定是post或get请求。

HTTP请求的GET,DELETE请求能有body吗?_delete请求可以传body吗_qq_34412985的博客-CSDN博客

比如我要更新员工信息,因为要在请求体中携带员工的具体信息,因此使用请求为post或put,又因为url不需要id值(id值在请求体中),因此url没有id。

前置知识2:四种请求方式匹配

@GetMapping、@PostMapping、@DeleteMapping、@PutMapping

四种mapping通常作用于controller层中的函数上

这个路径可以不加/,随意,与所属controller的mapping拼接形成最终的访问路径。

1、查询所有数据 @GetMapping("findAll") public List findAllTeacher() { List list = teacherService.list(null); return list; }

比如@GetMapping("findAll"),就是前端发送的Get请求、且url是"/eduservice/teacher/findAll",此时该 函数就会生效,处理该请求。

2、删除一个数据

再比如删除操作,因为RequestMapping已经设定好了模块与表名的url:"/eduservice/teacher" 此时我们只需要在url上一个员工id就好了,并且使用的是delete方法,这样就可以通过url:"/eduservice/teacher/{某个id}"来调用该删除功能。

@DeleteMapping("{id}") public boolean removeTeacher(@PathVariable String id){ boolean flag = teacherService.removeById(id); return flag; }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有